//
//  Queue.swift
//  Swift刷算法
//
//  Created by 卢悦明 on 2020/12/28.
//
import Foundation
/// 队列（java官方是用双向链表实现的）
class Queue<Q: Equatable> {
    var elements: [Q] = [Q]()
    private init(elements: [Q]) {
        self.elements.append(contentsOf: elements)
    }
    init() {
        
    }
//   队列长度
    func size() -> Int {
        elements.count
    }
//  队列是否为空
    func isEmpty() -> Bool {
        elements.count == 0
    }
    
    /// 入队列
    /// - Parameter elem: 数据元
    func push(elem: Q) {
        elements.append(elem)
    }
    /// 出队列
    /// - Returns: 数据
    func pop() -> Q? {
        isEmpty() ? nil : elements.removeFirst()
    }
//    队列头部元素
    func peek() -> Q? {
        elements.first
    }
    func clear() {
        elements.removeAll()
    }
}

extension Queue {
    /// 构造方法
    static func creatQueue(array: [Q]) -> Queue {
        Queue(elements: array)
    }
    
    /// 打印栈中的内容<从栈顶到尾部>
    func printQueue() {
        let elements = self.elements
        print("队列结构")
        var printStr = "头部 "
        var top = "————"
        for elem in elements {
            printStr = printStr + "\(elem) "
            top = top + "——"
        }
        top = top + "————"
        printStr = printStr + "尾部"
        print(top)
        print(printStr)
        print(top)
    }
}


